package main

import (
	"bysy-gin/config"
	"bysy-gin/model"
	"bysy-gin/router"
	"github.com/gin-gonic/gin"
	"github.com/spf13/viper"
)

/*
从入口文件开始，运行到每个文件
所有东西都要和 核心对象 实例绑定
*/

func main() {
	g := gin.Default()

	//配置静态文件和html文件位置
	//g.Static("/static", "./static")
	g.LoadHTMLGlob("templates/*")
	//读取配置
	conf := config.Config{}
	if err := conf.InitConfig(); err != nil {
		panic(err)
	}

	//连接数据库
	model.DB.Init()
	//if model.DB.Self == nil {
	//	fmt.Println("test!!!!!!!!!!!!!!!")
	//}
	//defer model.DB.Close()
	//加载路由
	router.Load(g)
	//g.Use(middleware.AuthMiddlerware())  全局生效中间件

	g.Run(viper.GetString("addr"))

}

/*
MVC  设计模式
当需要将数据、业务逻辑和界面显示分离，以便于独立开发和维护
M  model - 数据
V  view - 视图
C  control - 控制器
*/

/*
认证
web开发 -- 基于http协议 -- http协议又是一个无状态的协议（不保存数据）

两次请求是没有关联的
基于会话保持来做认证  -- cookie session  -- 不是特别安全  session需要额外的存储
cookie是保存在客户端
session是保存在服务端

基于token（令牌）的认证   -- 应用hash算法

JSON Web Token   -- token返回的内容规范
它是一个很长的字符串，中间用点（.）分隔成三个部分。
注意，JWT 内部是没有换行的，这里只是为了便于展示，将它写成了几行。

JWT 的三个部分依次如下。
Header（头部）  -- json格式 包含算法、类型等等信息  -- base64编码
Payload（负载） -- json格式  包含过期时间、生效时间等信息  -- base64编码
Signature（签名）
*/
